var express = require('express');
var OAuth = require('wechat-oauth');
var config = require('../config/wechat');
var router = express.Router();
var User = require('../models/user');
var Post = require('../models/post');
var pageHelper = require('../helper/page');
var signature = require('wx_jsapi_sign');
var api = new OAuth(config.appId, config.appSecret);

module.exports = function (app) {

  // 首页
  app.get('/', function (req, res, next) {
    // 得到授权回调地址
    var url = api.getAuthorizeURL('http://' + config.domain + '/callback','ssz','snsapi_userinfo');
    // 重定向回调
    res.redirect(url) 
  });

  // 授权重定向回调调用方法
  app.get('/callback', function (req, res, next) {
    // 写入cookie 默认为首页
    res.cookie('tabbarIndex', 0);
    // 获取请求返回的code
    var code = req.query.code,id="";
    // 根据code 获取access_token
    api.getAccessToken(code, function(err, result) {
      if (err) return next(err);
      // 赋值openid
      var access_token = result.data.access_token;
      id = result.data.openid;
      // 根据openid查找数据库的用户
      User.findOne({openid:id}, function (err, user) {
        // 如果找不到用户，则为新用户就重新获取用户信息并且储存在数据库中
        if (err || user == null) {
          // 设置参数
          var options = {
            // 用户oepnid
            "openId": id, 
            // 语言
            "lang": "zh_CN"
          };
          // 查询用户信息
          api.getUser(id, function (err, result) {
            if (err) return next(err);
            // 赋值用户基本资料
            var user = new User({
              "username": '',
              "phone": '',
              "authorId": '',
              "integral": 0,
              "openid": id,
              "nickname": result.nickname,
              "sex": result.sex,
              "province": result.province,
              "city": result.city,
              "country": result.country,
              "headimgurl": result.headimgurl,
              "create_at": new Date()
            });
            // 保存用户
            var promise = user.save();
            promise.then(function (user) {
              // 保存用户信息至session
              req.session.user = user;
              // 写入 flash
              req.flash('success', '保存用户成功');
              // 跳转页面
              res.redirect('/index');
            })
            .catch(function (err) {
              // 写入 flash
              req.flash('error', '保存用户失败');
              if (err) return next(err);
            });
          });
        }
        else {
          // 保存用户信息至session
          req.session.user = user;
          // 写入 flash
          req.flash('success', '用户写入session');
          // 如果是老用户直接跳转首页
          res.redirect('/index')       
        }
      });
    });
  });


  // 分享生成签名
  app.post('/getsignature', function(req, res){
    var url = req.body.url;
    signature.getSignature(config)(url, function(error, result) {
        if (error) {
            res.json({
                'error': error
            });
        } else {
            res.json(result);
        }
    });
  });


  // 根据标题模糊搜索
  app.post('/search', function(req, res){
    var val = req.body.val;
    // 获取传递page
    var page = req.query.page || 1;
    pageHelper.pageQuery(page,6,Post,['category','author'],{"title": '/'+val+'/'},{created: 'desc'}, function (err, $page){
      if (err) {
        return next(err);
      } else {
        res.jsonp($page);
      }
    });
  });  
  

  // 每日推荐10条信息
  app.get('/recommend', function(req, res, next) {
    // 获取传递page
    var page = req.query.page || 1;
    pageHelper.pageQuery(page,6,Post,['category','author'],'',{created: 'desc'}, function (err, $page){
      if (err) {
        return next(err);
      } else {
        res.jsonp($page);
      }
    });
  });  


  // 首页
  app.get('/index', function (req, res, next) {
    res.render('index', {
      title: '首页'
    });
  });
  

  // 导入user.js 路由
  app.use('/user', require('./user'));


  // 消息列表
  app.get('/msg', function (req, res, next) {
  });


  // 消息列表
  app.get('/message', function (req, res, next) {
    res.render('message', {
      title: '消息列表'
    });
  }); 

  // 导入posts.js 路由
  app.use('/article', require('./posts'));

  // 导入category.js 分类路由
  app.use('/categories', require('./categories'));


  // 404 page
  app.use(function (req, res) {
    if (!res.headersSent) {
      res.render('404');
    }
  });

};